 /**
  * 通用工具类
  */
 export default {
   /**
    * 格式化时间
    * @param {Date|string|number} date 日期对象/时间字符串/时间戳
    * @param {string} fmt 格式化模式，默认 'yyyy-MM-dd hh:mm:ss'
    * @returns {string} 格式化后的时间字符串
    */
   formatDate(date, fmt = 'yyyy-MM-dd hh:mm:ss') {
     date = new Date(date)
     const o = {
       'M+': date.getMonth() + 1,
       'd+': date.getDate(),
       'h+': date.getHours(),
       'm+': date.getMinutes(),
       's+': date.getSeconds(),
       'q+': Math.floor((date.getMonth() + 3) / 3),
       'S': date.getMilliseconds()
     }
     
     if (/(y+)/.test(fmt)) {
       fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
     }
     
     for (let k in o) {
       if (new RegExp('(' + k + ')').test(fmt)) {
         fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
       }
     }
     return fmt
   },
 
   /**
    * 防抖函数
    * @param {Function} fn 需要防抖的函数
    * @param {number} delay 延迟时间，单位毫秒
    * @returns {Function} 防抖后的函数
    */
   debounce(fn, delay = 500) {
     let timer = null
     return function(...args) {
       if (timer) clearTimeout(timer)
       timer = setTimeout(() => {
         fn.apply(this, args)
       }, delay)
     }
   },
 
   /**
    * 节流函数
    * @param {Function} fn 需要节流的函数
    * @param {number} delay 延迟时间，单位毫秒
    * @returns {Function} 节流后的函数
    */
   throttle(fn, delay = 500) {
     let last = 0
     return function(...args) {
       const now = Date.now()
       if (now - last > delay) {
         fn.apply(this, args)
         last = now
       }
     }
   },
 
   /**
    * 获取文件扩展名
    * @param {string} filename 文件名
    * @returns {string} 文件扩展名
    */
   getFileExt(filename) {
     if (!filename) return ''
     return filename.substring(filename.lastIndexOf('.') + 1)
   },
 
   /**
    * 格式化文件大小
    * @param {number} size 文件大小（字节）
    * @returns {string} 格式化后的文件大小
    */
   formatFileSize(size) {
     if (size < 1024) {
       return size + 'B'
     } else if (size < 1024 * 1024) {
       return (size / 1024).toFixed(2) + 'KB'
     } else if (size < 1024 * 1024 * 1024) {
       return (size / (1024 * 1024)).toFixed(2) + 'MB'
     } else {
       return (size / (1024 * 1024 * 1024)).toFixed(2) + 'GB'
     }
   }
 }